package com.mach.platform.utils;

import com.mach.platform.constants.CommonConstants;
import org.joda.time.DateTime;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author Administrator
 * @Description: 时间工具类
 * @Package: com.mach.platform.utils
 * @time 2018/4/23 0023 14:56
 */
public class DateUtil {

	/**
	 * 获取当前时间DateTime
	 * @return
	 */
	public static DateTime getCurrentDateTime() {
		return DateTime.now();
	}

	/**
	 * Date转String
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String getStringDate(Date date, String pattern) {
		DateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(date);
	}

	/**
	 * String类型时间转Date类型
	 * @param date 转换的时间
	 * @param pattern 转换格式
	 * @return
	 */
	public static Date getDateByStrTime(String date, String pattern) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.parse(date);
	}


	/**
	 * 获取指定日期之前或者之后几天的日期
	 * @param date 指定时间
	 * @param type 之前还是之后，+：之后，-：之前
	 * @param days 天数
	 * @return
	 */
	public static String getDaysBeforeAfter(String date, String type, int days) {
		DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date time = sdf.parse(date);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(time);
			calendar.add(Calendar.DATE, Integer.parseInt(type + days));
			return sdf.format(calendar.getTime());
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * String时间转long类型时间
	 * @param time
	 * @return
	 * @throws ParseException
	 */
	public static long getToLong(String time) throws ParseException {
		DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = sdf.parse(time);
		return date.getTime();
	}


	/**
	 * 根据传入的 时间 和 格式，转化为 字符串时间
	 * @param dateTime  时间
	 * @param pattern  时间格式
	 * @return String
	 */
	public static String convertTimeForCustomizeDatetime(DateTime dateTime, String pattern) {
		return dateTime.toString(pattern);
	}


	/**
	 * 获取 年月日时分秒 yyyy-MM-dd HH:mm:ss
	 *
	 * @return String
	 */
	public static String getYMDHMS() {
		return DateTime.now().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

	/**
	 * 获取 传入的时间，分钟最小值
	 * @param dateTime 传入datetime时间
	 * @return 返回转换后的时间
	 */
	public static String getYmdhmsByDatetimeMinInMinute(DateTime dateTime) {

		return dateTime.secondOfMinute().withMinimumValue().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

	/**
	 *  获取 传入的时间，分钟最大值
	 * @param dateTime
	 * @return
	 */
	public static String getYmdhmsByDatetimeMaxInMinute(DateTime dateTime) {
		return dateTime.secondOfMinute().withMaximumValue().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

	/**
	 * 根据传入时间，获取 小时最小值
	 * @param dateTime
	 * @return
	 */
	public static String getYmdhmsByDatetimeMinInHour(DateTime dateTime) {

		return dateTime.minuteOfHour().withMinimumValue().secondOfMinute().withMinimumValue().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

	/**
	 * 获取 传入的时间，小时最大值
	 *
	 * @param dateTime
	 * @return
	 */
	public static String getYmdhmsByDatetimeMaxInHour(DateTime dateTime) {
		return dateTime.minuteOfHour().withMaximumValue().secondOfMinute().withMaximumValue().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}


	/**
	 * 获取年月日 yyyy-MM-dd
	 *
	 * @return String
	 */
	public static String getYmd() {
		return DateTime.now().toString(CommonConstants.DATE_STYLE_YMD);
	}

	/**
	 * 获取年月日 yyyy_MM_dd
	 *
	 * @return String
	 */
	public static String getYmdSnake() {
		return DateTime.now().toString(CommonConstants.DATE_STYLE_YMD_SNAKE);
	}

	/**
	 * 获取 当天 开始的时间 如：2014-06-19 00:00:00
	 *
	 * @return String
	 */
	public static String getStartOfDayInYMDHMS() {
		return DateTime.now().withTimeAtStartOfDay().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

	/**
	 * 获取当天的结束时间 如：2014-06-19 23:59:59
	 *
	 * @return String
	 */
	public static String getEndOfDayInYMDHMS() {
		return DateTime.now().millisOfDay().withMaximumValue().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

	/**
	 * 获取当月的开始时间 如：2018-03-01 00:00:00
	 *
	 * @return String
	 */
	public static String getStartOfMonthInYMDHMS() {

		return DateTime.now().dayOfMonth().withMinimumValue().millisOfDay().withMinimumValue().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

	/**
	 * 获取当月的结束时间 如：2018-03-31 23:59:59
	 *
	 * @return String
	 */
	public static String getEndOfMonthInYMDHMS() {
		return DateTime.now().dayOfMonth().withMaximumValue().millisOfDay().withMaximumValue().toString(CommonConstants.DATE_STYLE_YMDHMS);
	}

}
